/* Copyright (c) 2016-2020 Enfry Ltd. All Rights Reserved.
 * 
 * This software is the confidential and proprietary information of Enfry. 
 * You shall not disclose such Confidential Information
 * and shall use it only in accordance with the terms of the agreements
 * you entered into with Enfry.
 */
package com.enfry.common.util.system;

import com.enfry.common.util.String.Strings;


/**
 * 系统相关工具类
 * 
 * 键相关值的描述 
 * os.name                          操作系统的名称 
 * os.arch                          操作系统的架构 
 * os.version                       操作系统的版本 
 * user.name                        用户的账户名称 
 * user.home                        用户的主目录 
 * user.dir                         用户的当前工作目录 
 * file.separator                   文件分隔符（在 UNIX 系统中是“/”） 
 * path.separator                   路径分隔符（在 UNIX 系统中是“:”） 
 * line.separator                   行分隔符（在 UNIX 系统中是“/n”） 
 * java.version                     Java 运行时环境版本 
 * java.vendor                      Java 运行时环境供应商 
 * java.vendor.url                  Java 供应商的 URL 
 * java.home                        Java 安装目录 
 * java.vm.specification.version    Java 虚拟机规范版本 
 * java.vm.specification.vendor     Java 虚拟机规范供应商 
 * java.vm.specification.name       Java 虚拟机规范名称 
 * java.vm.version                  Java 虚拟机实现版本 
 * java.vm.vendor                   Java 虚拟机实现供应商 
 * java.vm.name                     Java 虚拟机实现名称 
 * java.specification.version       Java 运行时环境规范版本 
 * java.specification.vendor        Java 运行时环境规范供应商 
 * java.specification.name          Java 运行时环境规范名称 
 * java.class.version               Java 类格式版本号 
 * java.class.path                  Java 类路径 
 * java.library.path                加载库时搜索的路径列表 
 * java.io.tmpdir                   默认的临时文件路径 
 * java.compiler                    要使用的 JIT 编译器的名称 
 * java.ext.dirs                    一个或多个扩展目录的路径 
 */

public class Systems
{
    /*******************************************************************/
    //常用的判断和获取方法
    /*******************************************************************/
    
    /** 判断是否是Windows */
    public static boolean isWindows()
    {
        return Strings.startsWithIgnoreCase(getOsName(), "windows");  
    }
    
    /** 判断是否是Linux */
    public static boolean isLinux()
    {
        return Strings.startsWithIgnoreCase(getOsName(), "linux");  
    }
    
    
    /** JAVA版本号是否1.5以上(含1.5) */
    public static boolean isJavaVersionMoreThen5()
    {
        return getJavaVersion().compareTo("1.5") >= 0;
    }
    
    /** JAVA版本号是否1.6以上(含1.6) */
    public static boolean isJavaVersionMoreThen6()
    {
        return getJavaVersion().compareTo("1.6") >= 0;
    }
    
    /** JAVA版本号是否1.7以上(含1.7) */
    public static boolean isJavaVersionMoreThen7()
    {
        return getJavaVersion().compareTo("1.7") >= 0;
    }
    
    /** JAVA版本号是否1.8以上(含1.8) */
    public static boolean isJavaVersionMoreThen8()
    {
        return getJavaVersion().compareTo("1.8") >= 0;
    }

    /** 等同于getPathSeparator */
    public static String getClassPathSeparator()
    {
        return getPathSeparator();
    }
    
    /** 增加库路径  */
    public static void addLibraryPath(String dir)
    {
        String libraryPath = System.getProperty("java.library.path");
        System.setProperty("java.library.path", dir+getClassPathSeparator()+libraryPath);
    }
    
    /** 获取类路径信息通过分隔符成数组 */
    public static String[] getClassPaths()
    {
        String classpath = getClassPath();
        String split = getClassPathSeparator();
        return classpath.split(split);
    }
    
    public static void setClassPath(String classPath)
    {
        System.setProperty("java.class.path", classPath);
    }
    
    /*******************************************************************/
    //属性设置获取等基本操作方法
    /*******************************************************************/
    
    /** 设置属性 */
    public static void setProperty(String key, String value)
    {
        System.setProperty(key, value);
    }
    
    /** 获取属性 */
    public static String getProperty(String key)
    {
        String value = System.getProperty(key);
        return (value == null)?System.getenv(key):value;
    }
    
    
    
 
    /*******************************************************************/
    //属性常用的获取方法
    /*******************************************************************/
    
    /** 获取操作系统名称 */
    public static String getOsName()
    {
        return System.getProperty("os.name");
    }
    
    /** 获取操作系统的架构 */
    public static String getOsArch()
    {
        return System.getProperty("os.arch");
    }
    
    /** 获取操作系统的架构 */
    public static String getOsVersion()
    {
        return System.getProperty("os.version");
    }
    
    /** 获取用户账号名称 */
    public static String getUserName()
    {
        return System.getProperty("user.name");
    }
    
    /** 获取用户主目录 */
    public static String getUserHome()
    {
        return System.getProperty("user.home");
    }    
    
    /** 获取用户当前工作目录(工程根目录) */
    public static String getUserDir()
    {
        return System.getProperty("user.dir");
    }
    
    /** 取得系统的文件分隔符，在window系统返回"\"，在unix/linux系统返回"/" */
    public static String getFileSeparator()
    {
        return System.getProperty("file.separator");
    }
    
    /** 取得系统的路径分隔符，在window系统返回";"，在unix/linux系统返回":"） */
    public static String getPathSeparator()
    {
        return System.getProperty("path.separator");
    }
    
    /** 取得系统的行分隔符，在window系统返回"\r\n"，在unix/linux系统返回"\n" */
    public static String getLineSeparator()
    {
        return System.getProperty("line.separator");
    }
    
    /** 获取JAVA版本号，返回如1.4,1.5 */
    public static String getJavaVersion()
    {
        return System.getProperty("java.version");
    }
    
    /** 获取全类路径信息 */
    public static String getClassPath()
    {
        return System.getProperty("java.class.path");
    }
    
    /** 获取加载库时搜索的库路径列表  */
    public static String getLibraryPath()
    {
        return System.getProperty("java.library.path");
    }
    
    /** 获取虚拟机信息 */
    public static String getVmInfo()
    {
        return System.getProperty("java.vm.info");
    }
    
    /** 获取虚拟机名称 */
    public static String getVmName()
    {
        return System.getProperty("java.vm.name");
    }
    
    /** 获取虚拟机版本 */
    public static String getVmVersion()
    {
        return System.getProperty("java.vm.version");
    }
    
    /** 获取系统工程文件编码 */
    public static String getFileEncoding()
    {
        return System.getProperty("file.encoding");
    }
    
    /** 获取系统编码 */
    public static String getSystemEncoding()
    {
        return System.getProperty("sun.jnu.encoding");
    }
}
